const db =require('../db/index')
const bcrypt = require('bcryptjs');
const jwt = require('jsonwebtoken')
const config = require('../config')
// 注册用户的处理函数
exports.regUser = (req, res) => {
  const userinfo = req.body;

  // 通过中间件的方法，不需要去再写下面的代码了
  if(!userinfo.username||!userinfo.password){
      return res.send({status: 1,message: '用户名或者密码不合法！'})
  }
  const sql = `select * from ev_uers where username=?`

  // console.log(userinfo)
  // [Object: null prototype] { username: 'zhangsan', password: '000000' }
  db.query(sql,[userinfo.username],function(err,results){
      if(err){
        // return res.send({ status: 1,message: err.message })
        return res.cc(err)
      }
      // 判断用户名是否被占用
      if(results.length > 0 ){
        // return res.send({status: 1,message:'用户名被占用，更换其他的用户名！'})
        return res.cc('用户名被占用，更换其他的用户名')
      }
      //  todo:用户名可以使用 bcrypt.hashSync()对密码进行加密
      userinfo.password = bcrypt.hashSync(userinfo.password,10)

      // 插入用户
      const sql1 = `insert into ev_uers set ? `
      db.query(sql1,{username: userinfo.username,password:userinfo.password},(err,results) => {
        if(err){
          // return res.send({ status: 1,message: err.message })
          return res.cc(err)
        }

        if(results.affectedRows !==1 ){
          // return res.send({status: 1,message:'注册用户失败，请稍后再试！'})
          return res.cc('注册用户失败，请稍后再试！')
        }
        // res.send({status: 0,message:'注册成功！'})
          res.cc('注册成功！',0)
      })
  })
    // res.send('reguser OK')
}
// 登录的处理函数
exports.login = (req, res) => {
  const userinfo = req.body;
  const sql = `select * from ev_uers where username=?`
  db.query(sql,userinfo.username,function(err,resluts){
    if(err) return res.cc(err)

    if(resluts.length !== 1) return res.cc('登录失败！')
    // todo: 判断用户输入的登录密码是否和数据库中的密码是否一致
    // 核心思路：调用 bcrypt.compareSync(用户提交的密码，数据库中的密码)
    // 返回值是布尔值（true 一致、false 不一致）
    console.log(resluts[0].password)
    const compareResult = bcrypt.compareSync(userinfo.password,resluts[0].password)
    if(!compareResult) {
      return res.cc('登录失败！')
    }
    // todo: 服务器段生成token的字符串
    // 通过es6的高级语法，去剔除password，user_pic
    const user = {...resluts[0],password:'',user_pic:''}
    const tokenStr = jwt.sign(user,config.jwtSecretKey,{
      expiresIn: '10h', //有效期设置为10个小时
    })
    res.send({
      status: 0,
      message: '登陆成功',
      token: 'Bearer'+tokenStr
    })
  })
  }

  // const db = {name: 'tianxinhao',age: 10}
  // ...db

  // const {name,age} = db
  